The get_by_name_label functions return a set, not a singleton, because names
authorEwan Mellor <ewan@xensource.com>
Sat, 28 Oct 2006 11:04:08 +0000 (12:04 +0100)
committerEwan Mellor <ewan@xensource.com>
Sat, 28 Oct 2006 11:04:08 +0000 (12:04 +0100)
are not guaranteed to be unique.

Signed-off-by: Ewan Mellor <ewan@xensource.com>
tools/libxen/include/xen_host.h
tools/libxen/include/xen_network.h
tools/libxen/include/xen_sr.h
tools/libxen/include/xen_vdi.h
tools/libxen/include/xen_vm.h
tools/libxen/src/xen_host.c
tools/libxen/src/xen_network.c
tools/libxen/src/xen_sr.c
tools/libxen/src/xen_vdi.c
tools/libxen/src/xen_vm.c
tools/libxen/test/test_bindings.c

index 8010b24b1ab359edad807c10ca713c708c28983f..02e2e86f74bdac911d8ea98aea314d9b045cd489 100644 (file)
@@ -175,10 +175,10 @@ xen_host_create(xen_session *session, xen_host *result, xen_host_record *record)
 
 
 /**
- * Get a reference to the object with the specified label.
+ * Get all the host instances with the given label.
  */
 extern bool
-xen_host_get_by_name_label(xen_session *session, xen_host *result, char *label);
+xen_host_get_by_name_label(xen_session *session, struct xen_host_set **result, char *label);
 
 
 /**
index 6b1f65f660ab0961a9030bd13fb720cfa8d9609a..a65e20f0ff6cf93b0adf54f8c7841c4df3caafa9 100644 (file)
@@ -173,10 +173,10 @@ xen_network_create(xen_session *session, xen_network *result, xen_network_record
 
 
 /**
- * Get a reference to the object with the specified label.
+ * Get all the network instances with the given label.
  */
 extern bool
-xen_network_get_by_name_label(xen_session *session, xen_network *result, char *label);
+xen_network_get_by_name_label(xen_session *session, struct xen_network_set **result, char *label);
 
 
 /**
index fc6c3f5701a1cb61cc246b1923c29c7fdcb656cf..8e46dcb4c69edab4e567bbda76c7b95d43d87e7f 100644 (file)
@@ -174,10 +174,10 @@ xen_sr_create(xen_session *session, xen_sr *result, xen_sr_record *record);
 
 
 /**
- * Get a reference to the object with the specified label.
+ * Get all the SR instances with the given label.
  */
 extern bool
-xen_sr_get_by_name_label(xen_session *session, xen_sr *result, char *label);
+xen_sr_get_by_name_label(xen_session *session, struct xen_sr_set **result, char *label);
 
 
 /**
index 9fbc9bb756072155e9571fb6b485c0eecaa3a010..e89b19fa30adc240dc43fa1b87c5c14cec9aa9fc 100644 (file)
@@ -180,10 +180,10 @@ xen_vdi_create(xen_session *session, xen_vdi *result, xen_vdi_record *record);
 
 
 /**
- * Get a reference to the object with the specified label.
+ * Get all the VDI instances with the given label.
  */
 extern bool
-xen_vdi_get_by_name_label(xen_session *session, xen_vdi *result, char *label);
+xen_vdi_get_by_name_label(xen_session *session, struct xen_vdi_set **result, char *label);
 
 
 /**
index af784648efffa8e2b9c5d87579eba9f4541bbd7e..54b75d1b9215cde3a51a9338190c5c526900b23b 100644 (file)
@@ -217,10 +217,10 @@ xen_vm_create(xen_session *session, xen_vm *result, xen_vm_record *record);
 
 
 /**
- * Get a reference to the object with the specified label.
+ * Get all the VM instances with the given label.
  */
 extern bool
-xen_vm_get_by_name_label(xen_session *session, xen_vm *result, char *label);
+xen_vm_get_by_name_label(xen_session *session, struct xen_vm_set **result, char *label);
 
 
 /**
index 849ed1223823156ee17b65cc2abb49e46cfef8e9..905aaf4ae5c029f3f0d43318dc9577970a8da756 100644 (file)
@@ -150,7 +150,7 @@ xen_host_create(xen_session *session, xen_host *result, xen_host_record *record)
 
 
 bool
-xen_host_get_by_name_label(xen_session *session, xen_host *result, char *label)
+xen_host_get_by_name_label(xen_session *session, struct xen_host_set **result, char *label)
 {
     abstract_value param_values[] =
         {
@@ -158,7 +158,7 @@ xen_host_get_by_name_label(xen_session *session, xen_host *result, char *label)
               .u.string_val = label }
         };
 
-    abstract_type result_type = abstract_type_string;
+    abstract_type result_type = abstract_type_string_set;
 
     *result = NULL;
     XEN_CALL_("host.get_by_name_label");
index c774fe72df6bbfa61ca8dd6a54f5489d72e02542..16b9d4035b542dbeb0100eb7bc14a1e3836d49c3 100644 (file)
@@ -148,7 +148,7 @@ xen_network_create(xen_session *session, xen_network *result, xen_network_record
 
 
 bool
-xen_network_get_by_name_label(xen_session *session, xen_network *result, char *label)
+xen_network_get_by_name_label(xen_session *session, struct xen_network_set **result, char *label)
 {
     abstract_value param_values[] =
         {
@@ -156,7 +156,7 @@ xen_network_get_by_name_label(xen_session *session, xen_network *result, char *l
               .u.string_val = label }
         };
 
-    abstract_type result_type = abstract_type_string;
+    abstract_type result_type = abstract_type_string_set;
 
     *result = NULL;
     XEN_CALL_("network.get_by_name_label");
index 183ad7784372328adaca4f84955d8b18fd5d5730..ddb8f91a12bdffae764426feb6e10bebae75043c 100644 (file)
@@ -152,7 +152,7 @@ xen_sr_create(xen_session *session, xen_sr *result, xen_sr_record *record)
 
 
 bool
-xen_sr_get_by_name_label(xen_session *session, xen_sr *result, char *label)
+xen_sr_get_by_name_label(xen_session *session, struct xen_sr_set **result, char *label)
 {
     abstract_value param_values[] =
         {
@@ -160,7 +160,7 @@ xen_sr_get_by_name_label(xen_session *session, xen_sr *result, char *label)
               .u.string_val = label }
         };
 
-    abstract_type result_type = abstract_type_string;
+    abstract_type result_type = abstract_type_string_set;
 
     *result = NULL;
     XEN_CALL_("SR.get_by_name_label");
index 9246077ec4bc3db1b2f5afcf4409c5d3315a44e9..96221158fea8ef9724804c2c3e891cfe5d890273 100644 (file)
@@ -167,7 +167,7 @@ xen_vdi_create(xen_session *session, xen_vdi *result, xen_vdi_record *record)
 
 
 bool
-xen_vdi_get_by_name_label(xen_session *session, xen_vdi *result, char *label)
+xen_vdi_get_by_name_label(xen_session *session, struct xen_vdi_set **result, char *label)
 {
     abstract_value param_values[] =
         {
@@ -175,7 +175,7 @@ xen_vdi_get_by_name_label(xen_session *session, xen_vdi *result, char *label)
               .u.string_val = label }
         };
 
-    abstract_type result_type = abstract_type_string;
+    abstract_type result_type = abstract_type_string_set;
 
     *result = NULL;
     XEN_CALL_("VDI.get_by_name_label");
index c2f2ff7558597698f06fdfd5ce67ec52ef7c6a01..528606712846c795b9bf34af2a5ec1339f4c2e69 100644 (file)
@@ -280,7 +280,7 @@ xen_vm_create(xen_session *session, xen_vm *result, xen_vm_record *record)
 
 
 bool
-xen_vm_get_by_name_label(xen_session *session, xen_vm *result, char *label)
+xen_vm_get_by_name_label(xen_session *session, struct xen_vm_set **result, char *label)
 {
     abstract_value param_values[] =
         {
@@ -288,7 +288,7 @@ xen_vm_get_by_name_label(xen_session *session, xen_vm *result, char *label)
               .u.string_val = label }
         };
 
-    abstract_type result_type = abstract_type_string;
+    abstract_type result_type = abstract_type_string_set;
 
     *result = NULL;
     XEN_CALL_("VM.get_by_name_label");
index 5468c6bb629aa8a40419f1a8af4b4c455a1c6758..0c47305a09689b7d888595636da3514dcd4cc9f2 100644 (file)
@@ -1,5 +1,5 @@
 /*
-  Copyright (c) 2006 XenSource, Inc.
* Copyright (c) 2006 XenSource, Inc.
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
@@ -14,7 +14,7 @@
  * You should have received a copy of the GNU Lesser General Public
  * License along with this library; if not, write to the Free Software
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307  USA
-*/
+ */
 
 #define _GNU_SOURCE
 #include <inttypes.h>
@@ -320,8 +320,9 @@ static void create_new_vm(xen_session *session)
     /*
      * Create a new disk for the new VM.
      */
-    xen_sr sr;
-    if (!xen_sr_get_by_name_label(session, &sr, "Local"))
+    xen_sr_set *srs;
+    if (!xen_sr_get_by_name_label(session, &srs, "Local") ||
+        srs->size < 1)
     {
         fprintf(stderr, "SR lookup failed.\n");
         print_error(session);
@@ -331,7 +332,7 @@ static void create_new_vm(xen_session *session)
 
     xen_sr_record_opt sr_record =
         {
-            .u.handle = sr
+            .u.handle = srs->contents[0]
         };
     xen_vdi_record vdi0_record =
         {
@@ -351,16 +352,24 @@ static void create_new_vm(xen_session *session)
         fprintf(stderr, "VDI creation failed.\n");
         print_error(session);
 
-        xen_sr_free(sr);
+        xen_sr_set_free(srs);
         xen_vm_free(vm);
         return;
     }
 
 
+    xen_vm_record_opt vm_record_opt =
+        {
+            .u.handle = vm
+        };
+    xen_vdi_record_opt vdi0_record_opt =
+        {
+            .u.handle = vdi0
+        };
     xen_vbd_record vbd0_record =
         {
-            .vm = vm,
-            .vdi = vdi0,
+            .vm = &vm_record_opt,
+            .vdi = &vdi0_record_opt,
             .device = "sda1",
             .mode = XEN_VBD_MODE_RW,
             .driver = XEN_DRIVER_TYPE_PARAVIRTUALISED
@@ -373,7 +382,7 @@ static void create_new_vm(xen_session *session)
         print_error(session);
 
         xen_vdi_free(vdi0);
-        xen_sr_free(sr);
+        xen_sr_set_free(srs);
         xen_vm_free(vm);
         return;
     }
@@ -396,7 +405,7 @@ static void create_new_vm(xen_session *session)
         xen_uuid_free(vbd0_uuid);
         xen_vbd_free(vbd0);
         xen_vdi_free(vdi0);
-        xen_sr_free(sr);
+        xen_sr_set_free(srs);
         xen_vm_free(vm);
         return;
     }
@@ -410,6 +419,6 @@ static void create_new_vm(xen_session *session)
     xen_uuid_free(vbd0_uuid);
     xen_vbd_free(vbd0);
     xen_vdi_free(vdi0);
-    xen_sr_free(sr);
+    xen_sr_set_free(srs);
     xen_vm_free(vm);
 }